//
//  ClassView.swift
//  swiftStudy
//
//  Created by ext.zhangjunfei on 2021/7/6.
//

import SwiftUI

struct ClassView: View {
    
    let code_1:String
    let code_2:String
    
    init() {
        code_1 =
            """
            struct Car{
                ///品牌
                var brand:String
                ///价格
                var price:Double
                
                ///驾驶
                //mutating:使用 mutating 关键字修饰方法是为了能在该方法中修改
                //struct 或是 enum 的变量
                mutating func drive(){
                    print("开着我价值\\(price)的\\(brand),兜兜风")
                }
            }

            var car = Car(brand: "奥迪", price: 300000)

            car.drive()
            """
        
        code_2 =
            """
            class ClassCar{
                ///品牌
                var brand:String
                ///价格
                var price:Double
                
                ///构造函数
                init(brand:String,price:Double) {
                    self.brand = brand
                    self.price = price
                }
                
                ///驾驶
                func drive(){
                    print("开着我价值\\(price)的\\(brand),兜兜风")
                }
            }

            var classCar = ClassCar(brand: "宝马", price: 700000)

            classCar.drive()
            """
    }
    
    var body: some View {
        ScrollView{
            LazyVStack(alignment: .leading, spacing: 10) {
                Section(header: SectionHeaderView(title: "类与结构体")) {
                    CommonTextView(content: "类是面向对象编程思想的核心，在面向对象编程思想中，万物皆对象，类是描述对象的一种方式。")
                    CommonTextView(content: "结构体也是描述数据的一种方式，并且在Swift语言中结构体十分强大，它可以进行属性和方法的封装，在某些情况下，结构体可以代替类来使用，但是类也有一些高级特性是结构体不具备的。")
                }
                
                Section(header: SectionHeaderView(title: "结构体")) {
                    CommonTextView(content: "在Swift语言中使用struct关键字定义结构体")
                    CodeView(code: code_1).padding(10)
                    CommonTextView(content: "注意：Swift语言中的数据类型分为值类型和引用类型。结构体、枚举以及除类以外的所有数据类型都属于值类型。只有类是引用类型的。值类型和引用类型数据的最大区别在于进行数据传递时，值类型总是把被复制，而引用类型不会被复制，引用类型是通过引用计数来管理器生命周期的。")
                }
                
                Section(header: SectionHeaderView(title: "类")) {
                    CommonTextView(content: "类是较结构体更加高级的一种数据类型，编程中所有的复杂的数据结构都是通过类来模拟的。类是编程世界万物的抽象，使用类可以模拟万物的对象。在Swift语言中使用class关键字来声明类。")
                    CodeView(code: code_2).padding(10)
                }
            }
        }
    }
}

struct ClassView_Previews: PreviewProvider {
    static var previews: some View {
        ClassView()
    }
}
